جزوه · فصل پنجم · جلسه ۵۱ · راه‌اندازی دستی لینوکس ← بازگشت به فهرست
📘 فصل پنجم · جلسه ۵۱ راه‌اندازی دستی لینوکس
📅 تاریخ: چهارشنبه، ۲۸ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat
از این بخش در امتحان سوال می‌آید. حتماً نکات کلیدی را حفظ کنید!
🚨 قبل از شروع، یه مثال ساده:

فرض کن کلید ماشین رو می‌زنی، ولی موتور روشن نمی‌شه. باید بری زیر کاپوت و دستی موتور رو راه‌اندازی کنی. توی لینوکس، وقتی GRUB خراب می‌شه و سیستم بالا نمی‌آد، باید با دستورات دستی، بوت‌لودر رو راه‌اندازی کنی. این جلسه دقیقاً همین رو بهت یاد میده!

▍ مقدمه

GRUB (Grand Unified Bootloader) برنامه‌ای است که قبل از سیستم‌عامل اجرا می‌شود و وظیفه دارد هسته لینوکس (Kernel) را پیدا کرده و بارگذاری کند. اگر به هر دلیلی GRUB نتواند این کار را انجام دهد، سیستم با پیام «grub rescue>» یا صفحه سیاه مواجه می‌شود.

⚠️ هشدار!

اگر سیستم شما بالا نمی‌آید و پیام grub rescue> یا error: no such partition می‌بینید، نگران نباشید. با چند دستور ساده می‌توانید سیستم را دوباره راه‌اندازی کنید.

▍ چرا GRUB خراب می‌شود؟ (علت‌های رایج)

علت توضیح
حذف یا جابه‌جایی پارتیشن بوت پارتیشنی که فایل‌های GRUB روی آن قرار دارد، حذف یا تغییر کرده است.
تغییر UUID پارتیشن‌ها پس از تغییر اندازه یا فرمت پارتیشن، UUID عوض می‌شود و GRUB آن را پیدا نمی‌کند.
نصب سیستم‌عامل دیگر (دوال‌بوت) نصب ویندوز یا سیستم‌عامل دیگر ممکن است GRUB را بازنویسی کند.
خرابی فایل‌های پیکربندی GRUB فایل grub.cfg خراب یا حذف شده است.
به‌روزرسانی ناقص آپدیت کرنل یا GRUB به درستی انجام نشده است.
مهم‌ترین علت خرابی GRUB در امتحان: تغییر UUID پارتیشن‌ها یا حذف پارتیشن بوت.

▍ راه‌حل اول: رفع مشکل از داخل grub rescue>

اگر مستقیماً وارد محیط grub rescue> شده‌اید، با چند دستور ساده می‌توانید بوت‌لودر را دستی راه‌اندازی کنید.

• مرحله ۱: شناسایی پارتیشن‌ها

grub rescue> ls (hd0) (hd0,msdos1) (hd0,msdos2) (hd0,msdos5)

توضیح: این دستور لیست پارتیشن‌های موجود را نمایش می‌دهد.

حالا هر پارتیشن را بررسی کنید تا بفهمید کدام یک شامل فایل‌های GRUB است:

grub rescue> ls (hd0,msdos1)/ grub rescue> ls (hd0,msdos2)/ grub rescue> ls (hd0,msdos5)/

توضیح: به دنبال پوشه‌هایی مثل /boot/grub یا /grub و فایل‌هایی مثل vmlinuz (هسته لینوکس) باشید.

• مرحله ۲: تنظیم root و prefix

وقتی پارتیشن صحیح را پیدا کردید (مثلاً (hd0,msdos5))، آن را به عنوان ریشه (root) تنظیم کنید:

grub rescue> set root=(hd0,msdos5) grub rescue> set prefix=(hd0,msdos5)/boot/grub

توضیح: set root پارتیشن ریشه را مشخص می‌کند و set prefix مسیر فایل‌های GRUB را تعیین می‌کند.

اگر فایل‌های GRUB در /boot/grub نباشند، ممکن است در /grub باشند. مسیر را با ls بررسی کنید.

• مرحله ۳: بارگذاری ماژول‌ها و بوت کردن

grub rescue> insmod normal grub rescue> normal

توضیح: insmod normal ماژول normal را بارگذاری می‌کند و normal منوی GRUB را نمایش می‌دهد.

✅ اگر مراحل بالا موفق بود:

منوی GRUB نمایش داده می‌شود و می‌توانید سیستم را به‌طور عادی بوت کنید. پس از ورود به سیستم، برای رفع دائمی مشکل، GRUB را دوباره نصب کنید:

┌──(ya3in㉿kali)-[~] └─$ sudo update-grub └─$ sudo grub-install /dev/sda

▍ راه‌حل دوم: تعمیر با دیسک زنده (Live CD/USB)

اگر محیط grub rescue> کار نمی‌کند یا نمی‌توانید پارتیشن‌ها را شناسایی کنید، از یک دیسک زنده (Live CD/USB) استفاده کنید.

• مرحله ۱: بوت شدن با دیسک زنده

سیستم را با یک دیسک زنده (مثلاً کالی یا اوبونتو) بوت کنید و وارد ترمینال شوید.

• مرحله ۲: شناسایی پارتیشن‌ها

┌──(ya3in㉿kali)-[~] └─$ sudo fdisk -l └─$ sudo lsblk

توضیح: این دستورها لیست پارتیشن‌ها را نشان می‌دهند. پارتیشن ریشه (جایی که / نصب است) و پارتیشن بوت را پیدا کنید.

• مرحله ۳: Mount کردن پارتیشن‌ها

┌──(ya3in㉿kali)-[~] └─$ sudo mount /dev/sda5 /mnt └─$ sudo mount /dev/sda1 /mnt/boot/efi # در صورت وجود پارتیشن EFI └─$ sudo mount --bind /dev /mnt/dev └─$ sudo mount --bind /proc /mnt/proc └─$ sudo mount --bind /sys /mnt/sys

توضیح: پارتیشن ریشه و پارتیشن‌های سیستمی را Mount می‌کنیم تا بتوانیم محیط را تعمیر کنیم.

• مرحله ۴: ورود به محیط chroot

┌──(ya3in㉿kali)-[~] └─$ sudo chroot /mnt

توضیح: chroot شما را به محیط سیستم اصلی می‌برد تا بتوانید GRUB را تعمیر کنید.

• مرحله ۵: نصب مجدد GRUB

┌──(ya3in㉿kali)-[~] └─$ grub-install /dev/sda └─$ update-grub

توضیح: grub-install GRUB را روی MBR دیسک نصب می‌کند و update-grub فایل grub.cfg را به‌روز می‌کند.

در سیستم‌های UEFI، GRUB را با grub-install --target=x86_64-efi --efi-directory=/boot/efi نصب کنید.

▍ راه‌حل سوم: نصب مجدد GRUB در سیستم‌های مختلف

• در دبیان/کالی

┌──(ya3in㉿kali)-[~] └─$ sudo update-grub └─$ sudo grub-install /dev/sda

• در رد هت (RHEL/CentOS/Fedora)

┌──(user㉿redhat)-[~] └─$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg └─$ sudo grub2-install /dev/sda
تفاوت مهم: در دبیان از grub-install و در رد هت از grub2-install استفاده می‌شود.

▍ خلاصه و جمع‌بندی

✅ جمع‌بندی دستورات کلیدی:
  • ls → مشاهده پارتیشن‌ها
  • set root=(hdX,msdosY) → تنظیم ریشه
  • set prefix=(hdX,msdosY)/boot/grub → تنظیم مسیر GRUB
  • insmod normal → بارگذاری ماژول normal
  • normal → نمایش منوی GRUB
  • grub-install /dev/sda → نصب GRUB روی MBR
  • update-grub → به‌روزرسانی فایل grub.cfg (دبیان)
  • grub2-mkconfig -o /boot/grub2/grub.cfg → به‌روزرسانی grub.cfg (رد هت)